package com.example.drawlayout_google;

import android.os.Bundle;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Menu;
import android.widget.Toast;

import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.navigation.NavigationView;

import androidx.annotation.NonNull;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;

import com.example.drawlayout_google.databinding.ActivityMainBinding;

import org.jetbrains.annotations.NotNull;
/**
 * TODO Snackbar 封装-->没有网络时候展示
 * TODO 学习databing
 * //IMPORTANT:参考文章 https://www.jianshu.com/p/9c918016366e
 * https://www.jianshu.com/p/d2b1689a23bf
 * @see <a href="http://google.com">http://google.com</a>
 * @author gehj
 * @date 2021/1/6 14:35
 */

public class MainActivity extends AppCompatActivity {

    private AppBarConfiguration mAppBarConfiguration;
    private ActivityMainBinding binding;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //getRoot()方法可以获得layout文件的最外层View
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        setSupportActionBar(binding.appBarMain.toolbar);
        binding.appBarMain.fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "替换你的action", Snackbar.LENGTH_LONG)
                        .setAction("action", null).show();
            }
        });
        DrawerLayout drawer = binding.drawerLayout;//最外面的
        NavigationView navigationView = binding.navView;//左侧菜单 findbyID也能找到



        NavController navController = Navigation.findNavController
                (this,
                R.id.nav_host_fragment_content_main);

        //nav_host_fragment_content_main为fragments行为容器，类似于strusts的配置；
        //直接跳转可以这样写,可以加动画，直接在xml里面定义即可，可以传值用bundle即可
        //也可以进行safe args传值 以上都可以参考 kindle里的书 可百度


        //navController.navigate(R.id.action_firstFragment_to_secondFragment);//有点strust的味道

        //google为了结合自己的actionBar使用
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.galleryFragment, R.id.slideshowFragment)
                .setDrawerLayout(drawer)
                .build();
        //也可以用下面代替
        /*mAppBarConfiguration = new AppBarConfiguration.Builder(
                navController.getGraph()).build();*/


        mAppBarConfiguration = new AppBarConfiguration.Builder(
                navController.getGraph())
                .setDrawerLayout(drawer)
                .build();


        //展示appbar的侧滑三杠以及点击出现侧滑菜单，点击变化appbar的内柔，
        // 但不设置照样可以侧滑，但点击后appbar的内容不会变化

        //以下这些代码可以直接用menu的点击事件代替
        NavigationUI.setupActionBarWithNavController
                (this,
                navController,
                mAppBarConfiguration); //mAppBarConfiguration给menu跳转知名方向；

        //menu跳转fragment
        NavigationUI.setupWithNavController(navigationView, navController);

        //如果不想切换fragment,用下面事件监听item的点击即可，还有其他的跳转监听
        /*navigationView.setNavigationItemSelectedListener(new NavigationView.
        OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull @NotNull MenuItem item) {
                return false;
            }
        });*/
        //navigation还有deeplink等用法，是给通知到指定页面跟网页url进行跳转用；

    }


    //2.menu 在Activity中的写法 覆写以下两个方法，更多方法见提示；
    //其他如ContextMenu、PopupMenu的用法类似 相关文章
    // https://blog.csdn.net/amynn/article/details/106694964?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-7.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-7.control
    //https://www.jianshu.com/p/cf6784dc26d4  Android Menu菜单使用
    //context menu有点类似于popmenu,只不过上下文对象不同；
    // 这里的view代表popupMenu需要依附的view
    //PopupMenu popupMenu = new PopupMenu(MainActivity.this, view);
    //popupMenu.getMenu().findItem(R.id.del).setVisible(false); 可以隐藏或显示popMenu
    //在evernote中有备份
    /**
    *
    * onCreateOptionsMenu(Menu menu)
     * 每次Activity一创建就会执行，一般只执行一次；
     * onPrepareOptionsMenu(Menu menu)
     * 每次menu被打开时，该方法就会执行一次；
     * onOptionsItemSelected(MenuItem item)
     * 每次menu菜单项被点击时，该方法就会执行一次；
     * invalidateOptionsMenu()
     * 刷新menu里的选项里内容，它会调用onCreateOptionsMenu(Menu menu)方法
     * onCreateContextMenu()
     * 创建控件绑定的上下文菜单menu，根据方法里的View参数识别是哪个控件绑定
     * onContextItemSelected(MenuItem item)
     * 点击控件绑定的上下菜单menu的内容项
    *  Fragment中的菜单项显示出来，还需要在Fragment.onCreat()中调用setHasOptionsMenu(true)方法
    * */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {//在onResume后调用
        // Inflate the menu; this adds items to the action bar if it is present.
        //getMenuInflater().inflate(R.menu.main, menu);
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.main, menu);
        return true;// 返回true才会显示Menu
    }


    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.action_settings:
                Toast.makeText(this, "选择了"+item.getTitle(),
                        Toast.LENGTH_SHORT).show();
                break;
        }

        return super.onOptionsItemSelected(item);
    }


    //popBackStack() 如果当前的返回栈是空的就会报错，
    // 因为栈是空的了，navigateUp() 则不会，还是停留在当前界面
    @Override
    public boolean onSupportNavigateUp() {
        NavController navController =
                Navigation.findNavController(this,
                        R.id.nav_host_fragment_content_main);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }
}